package ch08 {
	/**
	 * 位图填充和三角
	 * @author jianping.shenjp
	 */
	import __AS3__.vec.Vector;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	[SWF(backgroundColor=0xffffff)]
	public class BitmapTrianglesUV1 extends Sprite {
		[Embed(source="../../assets/image.jpg")]
		private var ImageClass:Class;

		public function BitmapTrianglesUV1(){
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			var vertices:Vector.<Number> = new Vector.<Number>();
			//vertices.push(100, 100);
			//vertices.push(200, 100);
			//vertices.push(200, 200);
			//vertices.push(100, 200);
			vertices.push(150, 50);
			vertices.push(1000, 100);
			vertices.push(800, 600);
			vertices.push(100, 200);

			var indices:Vector.<int> = new Vector.<int>();
			indices.push(0, 1, 2);
			indices.push(2, 3, 0);

			var uvtData:Vector.<Number> = new Vector.<Number>();
			uvtData.push(0, 0);
			uvtData.push(1, 0);
			uvtData.push(1, 1);
			uvtData.push(0, 1);
			var bitmap:Bitmap = new ImageClass() as Bitmap;
			graphics.beginBitmapFill(bitmap.bitmapData);
			/**
			   drawTriangles () 方法
			   public function drawTriangles(vertices:Vector.<Number>, indices:Vector.<int> = null, uvtData:Vector.<Number> = null, culling:String = "none"):void
			   呈现一组三角形（通常用于扭曲位图），并为其指定三维外观。drawTriangles() 方法使用一组 (u,v) 坐标将当前填充或位图填充映射到三角形面。
			   可以使用任何类型的填充，但如果填充有转换矩阵，则将忽略该转换矩阵。
			   在使用位图填充时，uvtData 参数可改善纹理映射。

			   参数
			   vertices:Vector.<Number> — 一个由数字构成的矢量，其中的每一对数字将被视为一个坐标位置（一个 x, y 对）。vertices 参数是必需的。
			   indices:Vector.<int> (default = null) — 一个由整数或索引构成的矢量，其中每三个索引定义一个三角形。如果 indexes 参数为 null，则每三个顶点（vertices 矢量中的 6 对 x,y）定义一个三角形。否则，每个索引将引用一个顶点，即 vertices 矢量中的一对数字。例如，indexes[1] 引用 (vertices[2], vertices[3])。indexes 参数是可选的，但 indexes 通常会减少提交的数据量和计算的数据量。
			   uvtData:Vector.<Number> (default = null) — 由用于应用纹理映射的标准坐标构成的矢量。每个坐标引用用于填充的位图上的一个点。每个顶点必须具有一个 UV 或一个 UVT 坐标。对于 UV 坐标，(0,0) 是位图的左上角，(1,1) 是位图的右下角。
			   如果此矢量的长度是 vertices 矢量长度的两倍，则使用标准坐标而不进行透视校正。
			   如果此矢量的长度是 vertices 矢量长度的三倍，则将第三个坐标解释为“t”（即在视角空间中从视点到纹理的距离）。这有助于呈现引擎在三维中映射纹理时正确应用透视。
			   如果 uvtData 参数为 null，则将应用普通填充规则（和任何填充类型）。
			   culling:String (default = "none") — 指定是否呈现面向指定方向的三角形。此参数可防止呈现在当前视图中看不见的三角形。此参数可设置为由 TriangleCulling 类定义的任何值。
			 */
			graphics.drawTriangles(vertices, indices, uvtData);
			graphics.endFill();
		}
	}

}